package com.hspedu.threaduse;

/**
 * @author DL5O
 * @version 1.0
 * 通过继承Thread 类创建线程
 */

public class Thread01 {
    public static void main(String[] args) throws InterruptedException {
        //创建Cat对象，可以当做线程使用
        Cat cat = new Cat();
        //启动线程，调用start的时候还调用run方法
        cat.start();//最终执行 -> cat的run方法
        //cat.run();
        //如果这样写，run方法就是一个普通的方法，
        // 是由主线程调用了，并没有真正的开线程，
        // 会阻塞在这里，执行完毕后才会继续执行下面的代码


        //说明：当main线程启动一个子线程thread-0，主线程不会阻塞,
        // 即不会等待cat.start执行完毕后再往下执行
        //主线程中如果后面还有代码的话，还会继续执行
        //这时我们的主线程和主线程 是交替执行的
        System.out.println("继续执行~~,"+Thread.currentThread().getName());
        for (int i = 0; i < 60; i++) {
            System.out.println("主线程 i=" + i);
            //休眠1秒
            Thread. sleep(1000);
        }
    }
}

//1.当一个类继承了Thread 类，该类就可以当做一个线程使用
//2.我们会重写run方法，写上自己的业务逻辑
//3.run方法在Thread也是实现了Runnable 接口的run方法
class Cat extends Thread {
    int times = 0;

    @Override
    public void run() {//重写run方法，写上自己的业务逻辑
        while (true) {
            //每隔一秒钟，输出"喵喵，我是小猫咪"
            System.out.println("喵喵，我是小猫咪" + (++times)
                    + ",线程名称=" + Thread.currentThread().getName());
            //让线程休眠1秒钟
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            if (times == 80) {
                break;//当times 等于80就退出这个while循环，这时线程就退出了
            }
        }
    }
}

